package com.zhanghp.class003;

/**
 * <h1>二进制打印</h1>
 *
 * @author zhanghp
 * @since 2024/2/6 9:56
 */
public class BinaryPrint {

    public static void main(String[] args) {
        print(20);
        print2(20);
    }
    public static void print(int a){
        int i = 31;
        while (i >= 0) {
            System.out.print((a & ( 1 << i--)) == 0 ? "0" : "1");
        }
        System.out.println();
    }

    public static void print2(int a){
        for (int i = 31; i >= 0; i--) {
            // 下面这句写法，可以改成 :
            // System.out.print((a & (1 << i)) != 0 ? "1" : "0");
            // 但不可以改成 :
            // System.out.print((a & (1 << i)) == 1 ? "1" : "0");
            // 因为a如果第i位有1，那么(a & (1 << i))是2的i次方，而不一定是1
            // 比如，a = 0010011
            // a的第0位是1，第1位是1，第4位是1
            // (a & (1<<4)) == 16（不是1），说明a的第4位是1状态
            System.out.print((a & ( 1 << i)) == 0 ? "0" : "1");
        }
        System.out.println();
    }

    public static void printWrong(int a){
        int i = 32;
        while(i > 0){
            // 总共31位，左移32位越界，所以错误
            System.out.print((a & ( 1 << i--)) == 0 ? "0" : "1");
        }
        System.out.println();
    }

}
